﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;

namespace HeathCareSystem.Tier.DAO
{
    public class LoaiBenhDAO
    {
        public static String RandomId()
        {
            // Chuỗi trong Mã loại bệnh
            String strChu = "lb";
            String strSo = "0";
            String strMaDau = strChu + "001";
            DataProvider dp = new DataProvider();
            // Câu lệnh truy vấn lấy Mã loại bệnh cuối cùng trong CSDL
            String strSql = "SELECT TOP 1 MaLoaiBenh FROM LOAIBENH ORDER BY MaLoaiBenh DESC";
            try
            {
                // CSDL có >= 1 record thì tạo Mã loại bệnh cuối cùng mới
                String strMaCuoi = dp.ExecuteScalar(strSql).ToString();

                String strTemp = (int.Parse(strMaCuoi.Remove(0, 2)) + 1).ToString();
                String strMaLoaiBenh = strChu;
                while (strMaLoaiBenh.Length + strTemp.Length < 5)
                    strMaLoaiBenh += strSo;
                return strMaLoaiBenh + strTemp;
            }
            catch (Exception)
            {
                // CSDL rỗng
                return strMaDau;
            }
        }

        public static DataTable DanhSachLoaiBenh()
        {
            DataProvider dp = new DataProvider();
            DataTable dtKetQua = new DataTable();
            string strSQL = string.Format("Select * from LOAIBENH");
            dtKetQua = dp.ExecuteQuery(strSQL);
            return dtKetQua;
        }

        public static LoaiBenhDTO TimLoaiBenh(string maBenh)
        {
            DataProvider dp = new DataProvider();
            LoaiBenhDTO kq = new LoaiBenhDTO();
            DataTable dt = new DataTable();
            string strSQL = string.Format("Select * from LOAIBENH where (MaBenh = N'{0}')", maBenh);
            dt = dp.ExecuteQuery(strSQL);
            kq.maBenh = Int32.Parse(dt.Rows[0][0].ToString());
            kq.tenBenh = dt.Rows[0][1].ToString();
            kq.trieuChung = dt.Rows[0][2].ToString();
            kq.phuongPhapChuaTri = dt.Rows[0][3].ToString();
            return kq;
        }

        //Tìm kiếm thông tin bệnh theo tên trong bảng tìm kiếm thông tin bệnh
        public static List<LoaiBenhDTO> TimLoaiBenhTheoTen(string tenBenh)
        {
            List<LoaiBenhDTO> lst = new List<LoaiBenhDTO>();
            try
            {
                DataProvider dp = new DataProvider();
                DataTable dt = new DataTable();
                string strSQL = string.Format("Select * from LOAIBENH where (TenBenh Like N'%{0}%')", tenBenh);
                dt = dp.ExecuteQuery(strSQL);
                foreach (DataRow dr in dt.Rows)
                {
                    LoaiBenhDTO kq = new LoaiBenhDTO();
                    kq.maBenh = Int32.Parse(dr["MaBenh"].ToString());
                    kq.tenBenh = dr["TenBenh"].ToString();
                    kq.trieuChung = dr["TrieuChung"].ToString();
                    kq.phuongPhapChuaTri = dr["PhuongPhapChuaTri"].ToString();
                    lst.Add(kq);
                }
            }
            catch (Exception)
            {
                lst = null;
            }
            return lst;
        }

        public static bool ThemLoaiBenh(LoaiBenhDTO benh)
        {
            DataProvider dp = new DataProvider();
            string strSQL = string.Format("INSERT INTO LoaiBenh (MaBenh, TenBenh, TrieuChung, PhuongPhapChuaTri)" +
                                            "VALUES (N'{0}', N'{1}', N'{2}', N'{3}',)",

                                            benh.maBenh, benh.tenBenh, benh.trieuChung, benh.phuongPhapChuaTri);
            return dp.ExecuteNonQuery(strSQL);
        }

        public static bool CapNhatLoaiBenh(LoaiBenhDTO benh)
        {
            DataProvider dp = new DataProvider();
            string strSQL = string.Format("UPDATE BenhNhan SET " +
                                          "  TenBenh = N'0', TrieuChung = N'1',  PhuongPhapChuaTri = N'4')",
                                          benh.tenBenh, benh.trieuChung, benh.phuongPhapChuaTri);
            return dp.ExecuteNonQuery(strSQL);
        }

        public static bool XoaLoaiBenh(LoaiBenhDTO benh)
        {
            DataProvider dp = new DataProvider();
            string strSQL = string.Format("DELETE BenhNhan SET " +
                                          "  MaBenh = N'0')",
                                          benh.maBenh);
            return dp.ExecuteNonQuery(strSQL);
        }

        // Check Tên loại bệnh
        public static bool Check_Name(String strTenLoaiBenh)
        {
            DataProvider dp = new DataProvider();
            String strSql = "SELECT * FROM LOAIBENH WHERE  TenBenh = N'" + strTenLoaiBenh + "'";
            DataTable dtb = dp.ExecuteQuery(strSql);

            if (dtb.Rows.Count > 0)
                return false;
            return true;
        }

        //Tìm loại bệnh theo triệu chứng trong bảng Tìm kiếm thông tin bệnh
        public static List<LoaiBenhDTO> TimLoaiBenhTheoTrieuChung(string trieuChung)
        {
            List<LoaiBenhDTO> lst = new List<LoaiBenhDTO>();
            try
            {
                DataProvider dp = new DataProvider();
                DataTable dt = new DataTable();
                string strSQL = string.Format("Select * from LOAIBENH where (TrieuChung Like N'%{0}%')", trieuChung);
                dt = dp.ExecuteQuery(strSQL);
                foreach (DataRow dr in dt.Rows)
                {
                    LoaiBenhDTO kq = new LoaiBenhDTO();
                    kq.maBenh = Int32.Parse(dr["MaBenh"].ToString());
                    kq.tenBenh = dr["TenBenh"].ToString();
                    kq.trieuChung = dr["TrieuChung"].ToString();
                    kq.phuongPhapChuaTri = dr["PhuongPhapChuaTri"].ToString();
                    lst.Add(kq);
                }
            }
            catch (Exception)
            {
                lst = null;
            }
            return lst;
        }

        //Tìm kiếm loại bệnh trong mục tìm kiếm bệnh
        public static DataTable TimLoaiBenh(string tenBenh, string trieuChung)
        {
            DataTable dt = new DataTable();
            DataProvider dp = new DataProvider();
            string strSQL;
            if (tenBenh == null && trieuChung != null)
            {
                strSQL = string.Format("SELECT TenBenh AS 'Tên Bệnh', TrieuChung AS 'Triệu Chứng', PhuongPhapChuaTri AS 'Phương Pháp Chữa Trị' FROM LoaiBenh WHERE (TrieuChung LIKE '%{1}%')", trieuChung);
            }

            if (trieuChung == null && tenBenh != null)
            {
                strSQL = string.Format("SELECT TenBenh AS 'Tên Bệnh', TrieuChung AS 'Triệu Chứng', PhuongPhapChuaTri AS 'Phương Pháp Chữa Trị' FROM LoaiBenh WHERE (TenBenh LIKE '%{0}%')", tenBenh);
            }

            if (tenBenh != null && trieuChung != null)
            {
                strSQL = string.Format("SELECT TenBenh AS 'Tên Bệnh', TrieuChung AS 'Triệu Chứng', PhuongPhapChuaTri AS 'Phương Pháp Chữa Trị' FROM LoaiBenh WHERE (TenBenh LIKE '%{0}%') AND (TrieuChung LIKE '%{1}%')", tenBenh, trieuChung);
            }

            else 
            { 
                strSQL = string.Format("SELECT TenBenh AS 'Tên Bệnh', TrieuChung AS 'Triệu Chứng', PhuongPhapChuaTri AS 'Phương Pháp Chữa Trị' FROM LoaiBenh)");
            }
            dt = dp.ExecuteQuery(strSQL);
            return dt;
        }

        
         /*Sử dụng để lấy danh sách tên bệnh trong mục tìm kiếm bệnh nhân*/
         /// <summary>
        /// Sử dụng để lấy danh sách tên bệnh trong mục tìm kiếm bệnh nhân
         /// </summary>
        /// <returns>List bệnh</returns>
        public static List<LoaiBenhDTO> DanhSachBenh()
        {
            DataProvider dp = new DataProvider();
            List<LoaiBenhDTO> listKetQua = new List<LoaiBenhDTO>();
            LoaiBenhDTO lbDTO = new LoaiBenhDTO();
            DataTable dt = new DataTable();
            string strSQL = string.Format("SELECT MaBenh, TenBenh FROM LoaiBenh");
            dt = dp.ExecuteQuery(strSQL);
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                lbDTO = new LoaiBenhDTO();
                lbDTO.maBenh = Int32.Parse(dt.Rows[i][0].ToString());
                lbDTO.tenBenh = dt.Rows[i][1].ToString();
                
                listKetQua.Add(lbDTO);
            }
            return listKetQua;
        }
    }
}